home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2007 June
/
PCWorld_2007-06_cd.bin
/
v cisle
/
tclock
/
tclocklight-040702-3.exe
/
source
/
property
/
pageformat.c
< prev
next >
Wrap
C/C++ Source or Header
|
2004-02-01
|
8KB
|
307 lines
/*-------------------------------------------------------------
pageformat.c : "Format" page of properties
(C) Kazuto Sato 1997-2003
For the license, please read readme.txt.
Written by Kazubon, Nanashi-san
---------------------------------------------------------------*/
#include "tcprop.h"
/* Globals */
BOOL CALLBACK PageFormatProc(HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam);
/* Statics */
static void SendPSChanged(HWND hDlg);
static void OnInit(HWND hDlg);
static void OnApply(HWND hDlg);
static void OnLocale(HWND hDlg);
static void OnCustom(HWND hDlg, BOOL bmouse);
static void On12Hour(HWND hDlg);
static void OnDetail(HWND hDlg);
static void OnFormatCheck(HWND hDlg, WORD id);
static char m_CustomFormat[BUFSIZE_FORMAT];
static BOOL m_bInit = FALSE;
static BOOL m_bChanged = FALSE;
static char *m_entrydate[] = { "Year4", "Year", "Month", "MonthS",
"Day", "Weekday", "Hour", "Minute", "Second", "Kaigyo",
"AMPM", "Hour12", "Custom", };
#define ENTRY(id) m_entrydate[(id)-IDC_YEAR4]
/*------------------------------------------------
Dialog Procedure for the "Format" page
--------------------------------------------------*/
BOOL CALLBACK PageFormatProc(HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
OnInit(hDlg);
return TRUE;
case WM_COMMAND:
{
WORD id, code;
id = LOWORD(wParam); code = HIWORD(wParam);
switch(id)
{
case IDC_LOCALE:
if(code == CBN_SELCHANGE)
OnLocale(hDlg);
break;
case IDC_FORMAT:
if(code == EN_CHANGE)
SendPSChanged(hDlg);
break;
case IDC_CUSTOM:
OnCustom(hDlg, TRUE);
break;
case IDC_12HOUR:
On12Hour(hDlg);
break;
case IDC_FORMATDETAIL:
OnDetail(hDlg);
break;
}
if(IDC_YEAR4 <= id && id <= IDC_AMPM)
OnFormatCheck(hDlg, id);
return TRUE;
}
case WM_NOTIFY:
switch(((NMHDR *)lParam)->code)
{
case PSN_APPLY: OnApply(hDlg); break;
case PSN_HELP: MyHelp(GetParent(hDlg), "Format"); break;
}
return TRUE;
}
return FALSE;
}
/*------------------------------------------------
notify parent window to enable "Apply" button
--------------------------------------------------*/
void SendPSChanged(HWND hDlg)
{
if(m_bInit)
{
g_bApplyClock = TRUE;
m_bChanged = TRUE;
SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)(hDlg), 0);
}
}
/*------------------------------------------------
Initialize the "Format" page
--------------------------------------------------*/
void OnInit(HWND hDlg)
{
HFONT hfont;
char s[BUFSIZE_FORMAT];
int i, ilang;
// common/tclang.c
SetDialogLanguage(hDlg, "Format", g_hfontDialog);
hfont = (HFONT)GetStockObject(SYSTEM_FIXED_FONT);
if(hfont)
SendDlgItemMessage(hDlg, IDC_FORMAT, WM_SETFONT, (WPARAM)hfont, 0);
// "Locale" combobox
ilang = GetMyRegLong("", "Locale", (int)GetUserDefaultLangID());
InitLocaleCombo(hDlg, IDC_LOCALE, ilang); // common/combobox.c
InitAutoFormat(ilang); // common/autoformat.c
// "year" -- "second"
for(i = IDC_YEAR4; i <= IDC_KAIGYO; i++)
{
CheckDlgButton(hDlg, i,
GetMyRegLong("", ENTRY(i), TRUE));
}
if(IsDlgButtonChecked(hDlg, IDC_YEAR))
CheckRadioButton(hDlg, IDC_YEAR4, IDC_YEAR, IDC_YEAR);
if(IsDlgButtonChecked(hDlg, IDC_YEAR4))
CheckRadioButton(hDlg, IDC_YEAR4, IDC_YEAR, IDC_YEAR4);
if(IsDlgButtonChecked(hDlg, IDC_MONTH))
CheckRadioButton(hDlg, IDC_MONTH, IDC_MONTHS, IDC_MONTH);
if(IsDlgButtonChecked(hDlg, IDC_MONTHS))
CheckRadioButton(hDlg, IDC_MONTH, IDC_MONTHS, IDC_MONTHS);
// "Internet Time" -- "Customize format"
for(i = IDC_AMPM; i <= IDC_CUSTOM; i++)
{
CheckDlgButton(hDlg, i,
GetMyRegLong("", ENTRY(i), FALSE));
}
GetMyRegStr("", "Format", s, BUFSIZE_FORMAT, "");
SetDlgItemText(hDlg, IDC_FORMAT, s);
GetMyRegStr("", "CustomFormat", m_CustomFormat, BUFSIZE_FORMAT, "");
On12Hour(hDlg);
OnCustom(hDlg, FALSE);
m_bInit = TRUE;
}
/*------------------------------------------------
Apply changes
--------------------------------------------------*/
void OnApply(HWND hDlg)
{
char s[BUFSIZE_FORMAT];
int i;
if(!m_bChanged) return;
m_bChanged = FALSE;
SetMyRegLong("", "Locale",
CBGetItemData(hDlg, IDC_LOCALE, CBGetCurSel(hDlg, IDC_LOCALE)));
for(i = IDC_YEAR4; i <= IDC_CUSTOM; i++)
{
SetMyRegLong("", ENTRY(i), IsDlgButtonChecked(hDlg, i));
}
GetDlgItemText(hDlg, IDC_FORMAT, s, BUFSIZE_FORMAT);
SetMyRegStr("", "Format", s);
if(IsDlgButtonChecked(hDlg, IDC_CUSTOM))
{
strcpy(m_CustomFormat, s);
SetMyRegStr("", "CustomFormat", m_CustomFormat);
}
}
/*------------------------------------------------
When changed "Locale" combobox
--------------------------------------------------*/
void OnLocale(HWND hDlg)
{
int ilang;
ilang = CBGetItemData(hDlg, IDC_LOCALE, CBGetCurSel(hDlg, IDC_LOCALE));
InitAutoFormat(ilang);
OnCustom(hDlg, FALSE);
}
/*------------------------------------------------
"Customize format" checkbox
--------------------------------------------------*/
void OnCustom(HWND hDlg, BOOL bmouse)
{
BOOL b;
int i;
b = IsDlgButtonChecked(hDlg, IDC_CUSTOM);
EnableDlgItem(hDlg, IDC_FORMAT, b);
for(i = IDC_YEAR4; i <= IDC_AMPM; i++)
EnableDlgItem(hDlg, i, !b);
if(m_CustomFormat[0] && bmouse)
{
if(b) SetDlgItemText(hDlg, IDC_FORMAT, m_CustomFormat);
else GetDlgItemText(hDlg, IDC_FORMAT, m_CustomFormat, BUFSIZE_FORMAT);
}
if(!b) OnFormatCheck(hDlg, 0);
SendPSChanged(hDlg);
}
/*------------------------------------------------
"12H" combobox
--------------------------------------------------*/
void On12Hour(HWND hDlg)
{
BOOL b;
b = IsDlgButtonChecked(hDlg, IDC_12HOUR);
if(!b)
{
CheckDlgButton(hDlg, IDC_AMPM, 0);
if(!IsDlgButtonChecked(hDlg, IDC_CUSTOM))
OnFormatCheck(hDlg, 0);
}
SendPSChanged(hDlg);
}
/*------------------------------------------------
"Detail..."
--------------------------------------------------*/
void OnDetail(HWND hDlg)
{
int r, ilang;
ilang = CBGetItemData(hDlg, IDC_LOCALE,
CBGetCurSel(hDlg, IDC_LOCALE));
r = DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_FORMAT2),
GetParent(hDlg), DlgProcFormat2, (LPARAM)ilang);
if(r == IDOK) SendPSChanged(hDlg);
}
/*------------------------------------------------
When clicked "year" -- "am/pm"
--------------------------------------------------*/
void OnFormatCheck(HWND hDlg, WORD id)
{
char s[BUFSIZE_FORMAT];
int parts[15];
int i;
for(i = IDC_YEAR4; i <= IDC_AMPM; i++)
{
parts[i-IDC_YEAR4] = IsDlgButtonChecked(hDlg, i);
}
if(id == IDC_YEAR4 || id == IDC_YEAR)
{
if(id == IDC_YEAR4 && parts[PART_YEAR4])
{
CheckRadioButton(hDlg, IDC_YEAR4, IDC_YEAR, IDC_YEAR4);
parts[PART_YEAR] = FALSE;
}
if(id == IDC_YEAR && parts[PART_YEAR])
{
CheckRadioButton(hDlg, IDC_YEAR4, IDC_YEAR, IDC_YEAR);
parts[PART_YEAR4] = FALSE;
}
}
if(id == IDC_MONTH || id == IDC_MONTHS)
{
if(id == IDC_MONTH && parts[PART_MONTH])
{
CheckRadioButton(hDlg, IDC_MONTH, IDC_MONTHS, IDC_MONTH);
parts[PART_MONTHS] = FALSE;
}
if(id == IDC_MONTHS && parts[PART_MONTHS])
{
CheckRadioButton(hDlg, IDC_MONTH, IDC_MONTHS, IDC_MONTHS);
parts[PART_MONTH] = FALSE;
}
}
if(id == IDC_AMPM)
{
CheckDlgButton(hDlg, IDC_12HOUR, 1);
On12Hour(hDlg);
}
AutoFormat(s, parts); // common/autoformat.c
SetDlgItemText(hDlg, IDC_FORMAT, s);
SendPSChanged(hDlg);
}